home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 August: Tool Chest / Dev.CD Aug 00 TC Disk 2.toast / pc / sample code / overview / moreisbetter / mib-libraries / moredevices / traddriverloaderlib / testtraddriverloaderlib / testtraddriverloader.p < prev   
Encoding:
Text File  |  2000-06-23  |  7.0 KB  |  264 lines

  1. (*
  2.     File:        TestTradDriverLoaderLib.p
  3.  
  4.     Contains:    Pascal program to test TradDriverLoaderLib.
  5.  
  6.     Written by:    Quinn
  7.  
  8.     Copyright:    © 1996-1999 by Apple Computer, Inc., all rights reserved.
  9.  
  10.                 You may incorporate this Apple sample source code into your program(s) without
  11.                 restriction. This Apple sample source code has been provided "AS IS" and the
  12.                 responsibility for its operation is yours. You are not permitted to redistribute
  13.                 this Apple sample source code as "Apple sample source code" after having made
  14.                 changes. If you're going to re-distribute the source, we require that you make
  15.                 it clear in the source that the code was descended from Apple sample source
  16.                 code, but that you've made changes.
  17.  
  18.     Change History (most recent first):
  19.  
  20.          <1>     25/2/99    Quinn   First checked in.
  21. *)
  22.  
  23. program TestTradDriverLoaderLib;
  24.  
  25.     uses
  26.         
  27.         // MoreIsBetter Setup
  28.         
  29.         MoreSetup,
  30.         
  31.         // Mac OS Interfaces
  32.  
  33.         MacTypes,
  34.         LowMem,
  35.         Files,
  36.         Devices,
  37.         
  38.         // MIB Prototypes
  39.         
  40.         TradDriverLoaderLib;
  41.         
  42.     procedure CheckTestResult(err : OSErr; mesg : Str255);
  43.     begin
  44.         if err = noErr then begin
  45.             writeln('  Passed ', mesg, '.');
  46.         end else begin
  47.             writeln('  •••Failed ', mesg, ' with error ', err:1, '.');
  48.         end; (* if *)
  49.     end; (* CheckTestResult *)
  50.     
  51.     procedure CheckTestResultBool(b : Boolean; mesg : Str255);
  52.     begin
  53.         if b then begin
  54.             writeln('  Passed ', mesg, '.');
  55.         end else begin
  56.             writeln('  •••Failed ', mesg, '.');
  57.         end; (* if *)
  58.     end; (* CheckTestResultBool *)
  59.  
  60.     procedure TestTradHighestUnitNumber;
  61.     begin
  62.         writeln('TestTradHighestUnitNumber');
  63.         writeln;
  64.         CheckTestResultBool( TradHighestUnitNumber = (LMGetUnitTableEntryCount - 1) , 'check against LMGetUnitTableEntryCount');
  65.     end; (* TestTradHighestUnitNumber *)
  66.     
  67.     procedure TestInstallOpenRemove;
  68.         var
  69.             err : OSErr;
  70.             rsrcName : Str255;
  71.             refNum : DriverRefNum;
  72.             cpb : CntrlParam;
  73.     begin
  74.         writeln('TestInstallOpenRemove');
  75.         writeln;
  76.         
  77.         (* Install *)
  78.         rsrcName := '.Test';
  79.         err := TradInstallDriverFromResource(0, @rsrcName, 48, TradHighestUnitNumber() + 1, refNum);
  80.         CheckTestResult(err, 'install');
  81.         
  82.         (* Open *)
  83.         if err = noErr then begin
  84.             err := TradOpenInstalledDriver(refNum, fsRdWrPerm);
  85.             CheckTestResult(err, 'open');
  86.         end; (* if *)
  87.         
  88.         (* Functional *)
  89.         if err = noErr then begin
  90.             cpb.ioCRefNum := refNum;
  91.             cpb.csCode := 666;
  92.             err := PBStatusSync(@cpb);
  93.             CheckTestResult(err, 'status call');
  94.         end; (* if *)
  95.         if err = noErr then begin
  96.             CheckTestResultBool(cpb.csParam[0] = refNum, 'results from status call');
  97.         end; (* if *)
  98.         
  99.         (* Remove *)
  100.         if err = noErr then begin
  101.             err := TradRemoveDriver(refNum, false);
  102.             CheckTestResult(err, 'remove');        
  103.         end; (* if *)
  104.  
  105.         writeln;
  106.     end; (* TestInstallOpenRemove *)
  107.  
  108.     procedure TestGestaltCalls;
  109.         var
  110.             rsrcName : Str255;
  111.             err : OSErr;
  112.             refNum : DriverRefNum;
  113.             flags : DriverFlags;
  114.     begin
  115.         writeln('TestGestaltCalls');
  116.         writeln;
  117.  
  118.         (* Install *)
  119.         rsrcName := '.Test';
  120.         err := TradInstallDriverFromResource(0, @rsrcName, 48, TradHighestUnitNumber() + 1, refNum);
  121.         CheckTestResult(err, 'install');
  122.  
  123.         (* Open *)
  124.         if err = noErr then begin
  125.             err := TradOpenInstalledDriver(refNum, fsRdWrPerm);
  126.             CheckTestResult(err, 'open');
  127.         end; (* if *)
  128.  
  129.         (* Gestalt On *)
  130.         if err = noErr then begin
  131.             err := TradDriverGestaltOn(refNum);
  132.             CheckTestResult(err, 'set Gestalt on');
  133.         end; (* if *)
  134.         if err = noErr then begin
  135.             err := TradGetDriverInformation(refNum, nil, @flags, nil, nil);
  136.             CheckTestResultBool((err = noErr) & TradDriverGestaltIsOn(flags), 'confirm Gestalt on');
  137.         end; (* if *)
  138.  
  139.         (* Gestalt Off *)
  140.         if err = noErr then begin
  141.             err := TradDriverGestaltOff(refNum);
  142.             CheckTestResult(err, 'set Gestalt off');
  143.         end; (* if *)
  144.         if err = noErr then begin
  145.             err := TradGetDriverInformation(refNum, nil, @flags, nil, nil);
  146.             CheckTestResultBool((err = noErr) & not TradDriverGestaltIsOn(flags), 'confirm Gestalt off');
  147.         end; (* if *)
  148.  
  149.         (* Remove *)
  150.         if err = noErr then begin
  151.             err := TradRemoveDriver(refNum, false);
  152.             CheckTestResult(err, 'remove');        
  153.         end; (* if *)
  154.  
  155.         writeln;
  156.     end; (* TestGestaltCalls *)
  157.     
  158.     
  159.     procedure TestInfoCalls;
  160.         var
  161.             err : OSErr;
  162.             refNumsCount : ItemCount;
  163.             i : ItemCount;
  164.             refNums : packed array [0..999] of DriverRefNum;
  165.             thisUnit : UnitNumber;
  166.             flags : DriverFlags;
  167.             name : Str255;
  168.             driverHeader : DRVRHeaderPtr;
  169.     begin
  170.         writeln('TestInfoCalls');
  171.         writeln;
  172.  
  173.         refNumsCount := 1000;
  174.         err := TradLookupDrivers(0, TradHighestUnitNumber, false, refNumsCount, @refNums[0]);
  175.         CheckTestResult(err, 'lookup drivers');        
  176.         if err = noErr then begin
  177.             for i := 0 to refNumsCount - 1 do begin
  178.                 err := TradGetDriverInformation(refNums[i], @thisUnit, @flags, @name, @driverHeader);
  179.                 if err = noErr then begin
  180.                     writeln('  refNum=', refNums[i]:1, ', unit=', thisUnit:1, ', flags=', (ord4(flags)), 
  181.                                     ', name=“', name, '”, addr=', ord4(driverHeader));
  182.                 end else begin
  183.                     writeln('  •••Error ', err:1, ' getting info for refnum ', refNums[i]:1, '.');
  184.                 end; (* if *)
  185.             end; (* for *)
  186.         end; (* if *)
  187.  
  188.         writeln;        
  189.     end; (* TestInfoCalls *)
  190.  
  191.     procedure TestAddLots;
  192.         var
  193.             err : OSErr;
  194.             refNum : DriverRefNum;
  195.             highChar : char;
  196.             lowChar : char;
  197.             rsrcName : Str255;
  198.     begin
  199.         writeln('TestAddLots');
  200.         writeln;
  201.         
  202.         (* Add 2 * 26 = 52) drivers to the unit table and open them all!
  203.                 Have to stop before 'T' otherwise our unique names clash with '.Test'.
  204.                 Note that this is limited by kMaximumNumberOfUnitTableEntries defined
  205.                 in TradDriverLoaderLib.c.
  206.         *)
  207.         
  208.         for highChar := 'A' to 'B' do begin
  209.             for lowChar := 'A' to 'Z' do begin
  210.                 rsrcName := '.Test';
  211.                 err := TradInstallDriverFromResource(0, @rsrcName, 48, TradHighestUnitNumber() + 1, refNum);
  212.                 if err = noErr then begin
  213.                     rsrcName[2] := highChar;
  214.                     rsrcName[3] := lowChar;
  215.                     err := TradRenameDriver(refNum, rsrcName);
  216.                 end; (* if *)
  217.                 if err = noErr then begin
  218.                     err := TradOpenInstalledDriver(refNum, fsRdWrPerm);
  219.                 end; (* if *)
  220.                 if err <> noErr then begin
  221.                     writeln('  •••Adding lots failed at ''', highChar, lowChar, ''' with error ', err:1, '.');
  222.                     exit(TestAddLots);
  223.                 end; (* if *)
  224.             end; (* for *)
  225.         end; (* for *)
  226.         
  227.         writeln('  Drivers added successfully!');
  228.         
  229.         (* Remove all of the added units. *)
  230.  
  231.         for highChar := 'A' to 'B' do begin
  232.             for lowChar := 'A' to 'Z' do begin
  233.                 rsrcName := '.Test';
  234.                 rsrcName[2] := highChar;
  235.                 rsrcName[3] := lowChar;
  236.                 err := OpenDriver(rsrcName, refNum);
  237.                 if err = noErr then begin
  238.                     err := TradRemoveDriver(refNum, false);
  239.                 end; (* if *)
  240.                 if err <> noErr then begin
  241.                     writeln('  •••Removing lots failed at ''', highChar, lowChar, ''' with error ', err:1, '.');
  242.                     exit(TestAddLots);
  243.                 end; (* if *)
  244.             end; (* for *)
  245.         end; (* for *)
  246.         
  247.         writeln('  Drivers removed successfully!');
  248.  
  249.         writeln;
  250.     end; (* TestAddLots *)
  251.     
  252. begin
  253.     writeln('Hello Cruel World!');
  254.     writeln;
  255.     writeln('TestTradDriverLoaderLib');
  256.     writeln('-- a test tool for the TradDriverLoaderLib library.');
  257.     writeln;
  258.     TestInstallOpenRemove;
  259.     TestGestaltCalls;
  260.     TestInfoCalls;
  261.     TestAddLots;
  262.     writeln('Done.  Press command-Q to Quit.');
  263. end. (* TestTradDriverLoaderLib *)
  264.